#!/usr/bin/env python
# coding: utf-8

# # Un itérable entant que dictionnaire

# In[1]:


s = "ali"  # est une chaine de caractère
dict_s = { 0: "a", 1: "l", 2: "i", }  # est un dictionnaire qui peut représenter la chaine de caractère s

l = [1, 2, 3, 4, 5]  # est une liste
dict_l = { 0: 1, 1: 2, 2: 3, 3: 4, 4: 5, }  # est un dictionnaire qui peut représenter la liste l

t = (1, 2, 3, 4, 5)  # est un tuple
dict_t = { 0: 1, 1: 2, 2: 3, 3: 4, 4: 5,
}  # est un dictionnaire qui peut représenter le tuple t

r = range(5)  # est un range
dict_r = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4,
}  # est un dictionnaire qui peut représenter le range r

s = {1, 2, 3, 4, 5}  # est un set
dict_s = { 0: 1, 1: 2, 2: 3, 3: 4, 4: 5,
}  # est un dictionnaire qui peut représenter le set s


# Exercice: lire un entier?

# In[2]:


# Sans exigence
x=int(input('donner un entier'))

#Plus exigeant
x_str = input("donner un entier")
if x_str.isdigit():
    x = int(x_str)


# # Itérable en compréhension

# - Exercice: donner l ensemble des racine carre arrondi(2 chiffres apres la virgule)  des entiers qui sont:
#     - entre 0 et 10000
#     - sont divisible par 3, 5, 7, et 11

# In[3]:


# (Avec comprehension)
from math import sqrt

e = {
    round(sqrt(x), 2)
    for x in range(10001)
    if x % 3 == 0
    if x % 5 == 0
    if x % 7 == 0
    if x % 11 == 0
}
# Ou bien
e = {
    round(sqrt(x), 2)
    for x in range(10001)
    if (x % 3 == 0 and x % 5 == 0 and x % 7 == 0 and x % 11 == 0)
}
# Ou bien
e = {round(sqrt(x), 2) for x in range(10001) if (x % (3 * 5 * 7 * 11) == 0)}
e


# In[4]:


# Ou bien (sans comprehension)
ee = set()
for x in range(10001):
    if x % 3 == 0 and x % 5 == 0 and x % 7 == 0 and x % 11 == 0:
        ee.add(round(sqrt(x), 2))
ee


# In[5]:


t = tuple(l)
t


# Exercice:  creer ce dictionnaire: d={'etud_0':0**2,....,'etud_i':i**2,'etud_10':10**2 }

# In[6]:


d = {"etud_{}".format(i): i**2 for i in range(11)}
# Ou bien
d = {"etud_" + str(i): i**2 for i in range(11)}
# Ou bien
d = {f"etud_{i}": i**2 for i in range(11)}
d


# In[ ]:


# Ou bien (sans comprehension)
dd = {}
for x in range(11):
    cle = f"etud_{x}"
    # cle='etud_'+str(x)
    dd[cle] = x**2


# Exercice: A partir de liste de mots L, donner la liste mot en majuscule 

# In[8]:


l = ["sa7ar", "achraf", "ala", "lakhal"]
L = [esm.upper() for esm in l]
L


# Exercice: donner le dictionnaire ds:
# s='bonjoue tout le monde' ===> ds={0:'b',1:'o',......}

# In[9]:


s = "bonjoue tout le monde"
# 1ere methode (avec comprehension)
ds = {i: s[i] for i in range(len(s))}
# 2eme methode (sans comprehension)
ds = {}
for i in range(len(s)):
    d[i] = s[i]
# x=int(input('donner un entier'))


# - Exercice: dictionnaire qui répresente la fréquence de chaque lettres voyelles 
# 
#      s='bonjoue tout le monde'
#     ===>
#     freq_voy={'o':4,e:3,......} 

# In[10]:


s = "bonjoue tout le monde"

freq_voy = {car: s.count(car) for car in set(s) if car in "uioeya"}
# Ou bien

freq_voy = {car: s.count(car) for car in "uioeya" if car in s}

freq_voy


# ### Effacer un itérable

# In[11]:


l = [1, 2]
l.clear()
l
s = {1, 2}
s.clear()
s
d = {"a": 1, "b": 2}
d.clear()
d


# In[12]:


l = list(range(10))
l
# l=[]
l.clear()


# ### L'execution de la commande se fait du gauche vers la droite

# In[13]:


x = 1
y = 2
z = x + y
z  # z=3
d0 = {
    "a": 1,
    "b": 2,
    "c": 3,
    "a": 10,
    "a": -5,
}  # les cles doivent etre uniques. # la derniere valeur de la cle est prise en compte
d0


# In[14]:


éd0 = {"a": 1, "b": 2, "c": 3}
d1 = {"c": 30, "e": 40, "f": 50}
d0.update(d1)
d0


# In[15]:


# sum(I) prend en parametre un iterable I
sum((1, 2)) # --> 3
sum([1, 2]) # --> 3
# sum({1,2}) # --> 3
sum({1: "a", 2.5: "s"}) # --> 3.5

